package com.im.service.user.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.im.common.route.RouteInfo;
import com.im.service.user.entity.ImUserDataEntity;
import com.im.service.user.model.param.*;
import com.im.service.user.model.result.GetUserInfoResult;
import com.im.service.user.model.result.ImportUserResult;

import java.util.Map;

/**
 * IM用户服务接口
 */
public interface ImUserService extends IService<ImUserDataEntity> {

    /**
     * 导入IM用户的方法
     *
     * @param param 导入IM用户参数
     * @return 导入结果
     */
    ImportUserResult importUser(ImportUserParam param);

    /**
     * 删除IM用户的方法
     *
     * @param param 删除IM用户参数
     * @return 删除结果
     */
    ImportUserResult deleteUser(DeleteUserParam param);

    /**
     * 获取IM用户信息的方法
     *
     * @param param 获取IM用户信息参数
     * @return IM用户信息
     */
    GetUserInfoResult getUserInfo(GetUserInfoParam param);

    /**
     * 获取单个IM用户信息的方法
     *
     * @param userId 用户ID
     * @param appId  应用ID
     * @return 单个IM用户信息
     */
    ImUserDataEntity getSingleUserInfo(String userId, Integer appId);

    /**
     * 修改IM用户信息的方法
     *
     * @param param 修改IM用户信息参数
     */
    void modifyUserInfo(ModifyUserInfoParam param);

    /**
     * IM用户登录方法
     *
     * @param param 登录参数
     * @return 路由信息
     */
    RouteInfo login(LoginParam param);

    /**
     * 获取用户序列
     *
     * @param req 用户信息
     * @return 用户最大的序列号
     */
    Map getUserSequence(GetUserSequenceParam req);
}
